package dados;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import basicas.Alternativa;
import basicas.Exame;
import basicas.Questao;
import intefaces.InterfaceAlternativa;

public class DadosAlternativa extends MySQLConnector implements InterfaceAlternativa{

	@Override
	public void inserir(Alternativa alternativa) throws Exception {
		try{
			dbConn = dbConn();
			dbConn.setAutoCommit(false);
	
			String sql = "INSERT INTO Alternativa (texo_alternativa, correta, id_questao) VALUES (?, ?, ?)";
			
			preparedStatementInsert = dbConn.prepareStatement(sql);
			preparedStatementInsert.setString(1, alternativa.getTexto_alternativa());
			preparedStatementInsert.setBoolean(2, alternativa.isCorreta());
			preparedStatementInsert.setInt(3, alternativa.getQuestao().getId_questao());
			preparedStatementInsert.executeUpdate();
			
			dbConn.commit();
			
		}catch(SQLException ex){
			dbConn.rollback();
		}finally{
			if(preparedStatementInsert != null){
				preparedStatementInsert.close();
			}
			if(dbConn != null){
				dbConn.close();
			}	
		}
	}

	@Override
	public void alterar(Alternativa alternativa) throws Exception {
		try{
			dbConn = dbConn();
			dbConn.setAutoCommit(false);
	
			String sql = "UPDATE Alternativa SET texo_alternativa = ?, correta = ?, id_questao = ? WHERE id_alternativa = ?";
			
			preparedStatementInsert = dbConn.prepareStatement(sql);
			preparedStatementInsert.setString(1, alternativa.getTexto_alternativa());
			preparedStatementInsert.setBoolean(2, alternativa.isCorreta());
			preparedStatementInsert.setInt(3, alternativa.getQuestao().getId_questao());
			preparedStatementInsert.setInt(4, alternativa.getId_alternativa());
			preparedStatementInsert.executeUpdate();
			
			dbConn.commit();
			
		}catch(SQLException ex){
			dbConn.rollback();
		}finally{
			if(preparedStatementInsert != null){
				preparedStatementInsert.close();
			}
			if(dbConn != null){
				dbConn.close();
			}	
		}
		
	}

	@Override
	public void excluir(Alternativa alternativa) throws Exception {
		try{
			dbConn = dbConn();
			dbConn.setAutoCommit(false);
	
			String sql = "DELETE FROM Alternativa WHERE id_alternativa = ?";
			
			preparedStatementInsert = dbConn.prepareStatement(sql);
			preparedStatementInsert.setInt(1, alternativa.getId_alternativa());
			preparedStatementInsert.executeUpdate();
			
			dbConn.commit();
			
		}catch(SQLException ex){
			dbConn.rollback();
		}finally{
			if(preparedStatementInsert != null){
				preparedStatementInsert.close();
			}
			if(dbConn != null){
				dbConn.close();
			}	
		}
		
	}

	@Override
	public List<Alternativa> listarTodasAlternativas() throws Exception {
		List<Alternativa> lista = new ArrayList<Alternativa>();
		try{
			logar();
			String sql = "SELECT alt.id_alternativa, alt.texto_alternativa, alt.correta, qst.id_questao, qst.texto_questao, qst.multipla_escolha qst.pontos FROM Alternativa AS alt " +
						 "INNER JOIN Questao AS qst ON alt.id_questao = qst.id_questao";
			ResultSet rs = logar().executeQuery(sql);
			while(rs.next()){
				Alternativa alt = new Alternativa();
				Questao qst = new Questao();
				alt.setId_alternativa(rs.getInt("id_alternativa"));
				alt.setTexto_alternativa(rs.getString("texto_alternativa"));
				alt.setCorreta(rs.getBoolean("correta"));
				
				qst.setId_questao(rs.getInt("id_questao"));
				qst.setTexto_questao(rs.getString("texto_questao"));
				qst.setMultipla_escolha(rs.getBoolean("multipla_escolha"));
				qst.setPontos(rs.getDouble("pontos"));
				alt.setQuestao(qst);
				lista.add(alt);
			}
			deslogar();
			return lista;
		}catch(Exception ex){
			throw new Exception(ex.getMessage());
		}
		
	}

	@Override
	public List<Alternativa> listarTodasAlternativasQuestao(Questao questao)
			throws Exception {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public List<Alternativa> listarTodasAlternativasExame(Exame exame)
			throws Exception {
		// TODO Auto-generated method stub
		return null;
	}
	
	

}
